package scenic.toolkit.db;

import java.util.IdentityHashMap;
import java.util.LinkedList;
import java.util.Map;

import scenic.toolkit.db.event.ChangeEvent;
import scenic.toolkit.db.event.RecordChangeEvent;

public abstract class Record extends Node {
	private LinkedList<NodeListener> listeners = new LinkedList<NodeListener>();
	private Map<Property, Object> properties = new IdentityHashMap<Property, Object>();
	
	protected void notifyChange(String member) {
		notifyChange(new RecordChangeEvent(this, member));
	}
	
	public void storeTo(StorageOutputStream stream) {
		stream.write(this);
	}

	public void storeMembersTo(StorageOutputStream stream) {	
	}
		
	public void addListener(NodeListener listener) {
		listeners.add(listener);
	}

	public void removeListener(NodeListener listener) {
		listeners.remove(listener);
	}
	
	public void notifyChange(ChangeEvent event) {
		for(NodeListener l : listeners)
			l.changed(event);
		super.notifyChange(event);
	}
	
	Object read(Property property) {
		return properties.get(property);
	}
	
	void write(Property property, Object value) {
		properties.put(property, value);
	}
}
